package com.jacob.androidstudy.javanote;

/**
 * 继承：
 * 1. 若A类适用的地方，B类一定适用（即B is a A），可以考虑将B定义为A的子类。
 * 2. 若单纯为代码复用，不要使用继承。
 * 3. java.lang.Object类是所有类的父类。
 * 
 * 多态：
 * 1. 对象的多态：把子类当做父类使用。即定义一个父类对象的引用，然后指向一个子类对象。
 * 2. 一旦把子类当做父类使用，就只能使用父类中的域和方法。
 * 3. 一旦把子类当做父类使用，同时子类覆盖了父类的方法。调用该方法时，调用的是子类的方法。
 * 
 */
public class $06_继承和实现 extends $04_类和对象 implements $05_接口{
	
	/**
	 * 子类域：
	 * 1.子类继承父类的public和protected域。
	 * 2.子类域和父类域可以同名。此时创建一个子类，则两个同名域都存在，使用super.xxx访问父类域。
	 * 
	 */
	int instanceVar;
	
	
	/**
	 * 1. 所有子类的构造被调用时，都会去调用父类的构造。
	 * 2. 所有子类的构造第一行一定是super(...)或者是this(...)。若不写，Java会默认加上无参的super()。
	 * 3. 结合前两点，可以得到，子类中至少要有一个构造首行是super()。
	 */
	public $06_继承和实现() {
		super();
	}
	
	/**
	 * 子类中的方法名、参数列表、返回值和父类中某个方法一样时，就会产生方法覆盖。
	 * 方法覆盖：
	 * 1. 发生在父子类之间。
	 * 2. 同名、同参、同返回值。
	 * 3. 子类方法的访问权限，不能比父类方法更封闭。
	 * 4. 子类方法抛出的异常类型，不能比父类方法更宽泛。
	 */
	@Override
	public void 方法(int 形参1, int 形参2) {
		
	}
	
	
	public static void main(String[] args) {
//		1. 可以把子类对象当做父类对象看。一旦这样做了，就只能使用父类中的域和方法。
		$04_类和对象 tem = new $06_继承和实现();
		
//		2. 若把子类对象当做父类对象看，同时子类覆盖了父类的方法。调用该方法时，调用的是子类的方法。
		tem.方法(0, 1);
	}

	
	@Override
	public void 方法1() {
		
	}

	@Override
	public void 方法2() {
		
	}
	
	
	



}
